package artaza.controlador;

/**
 *
 * @author AGM
 */
import artaza.controlador.TrabajaController;
import artaza.persistencia.Evento;
import artaza.persistencia.Trabaja;
import artaza.persistencia.Camarero;
import artaza.persistencia.Finca;
import artaza.service.CamareroService;
import artaza.service.EventoService;
import artaza.service.FincaService;
import artaza.service.TrabajaService;
import com.google.appengine.api.datastore.Key;
import com.google.appengine.api.datastore.KeyFactory;
import java.util.Collection;
import java.util.List;
import java.util.Arrays;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Required;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class EventoController {

    private EventoService eventoService;
    private TrabajaService trabajaService;
    private CamareroService camareroService;
    private FincaService fincaService;

    @Autowired
    @Required
    public void setEventoService(EventoService eventoService) {
        this.eventoService = eventoService;
    }

    @Autowired
    @Required
    public void setTrabajaService(TrabajaService trabajaService) {
        this.trabajaService = trabajaService;
    }

    @Autowired
    @Required
    public void setCamareroService(CamareroService camareroService) {
        this.camareroService = camareroService;
    }

    @Autowired
    @Required
    public void setFincaService(FincaService fincaService) {
        this.fincaService = fincaService;
    }

    @RequestMapping(value = "/listadoeventos", method = RequestMethod.GET)
    public String doShowEvento(Model model) {
        final Collection<Evento> eventos = eventoService.getAlleventos();
        model.addAttribute("eventos", eventos);
        final Collection<Trabaja> trabajos = trabajaService.getAlltrabajos();
        model.addAttribute("trabajos", trabajos);
        final Collection<Camarero> plantilla = camareroService.getAllcamareros();
        model.addAttribute("plantilla", plantilla);
        final Collection<Finca> espacios = fincaService.getAllFincas();
        model.addAttribute("espacios", espacios);
        return "/listadoeventos";
    }

    @RequestMapping(value = "/crear_evento", method = RequestMethod.POST)
    public String doCrearEvento(
            @RequestParam("nombre") String nombre,
            @RequestParam("invitados") int invitados,
            @RequestParam("fecha_evento") String fecha_evento,
            @RequestParam("telefono") String telefono,
            @RequestParam("correo") String correo,
            Model model) {
        if (nombre.length() == 0) {
            return "redirect:listadoeventos";
        }
        final Evento e = new Evento();
        e.setNombre(nombre);
        e.setInvitados(invitados);
        e.setFecha_evento(fecha_evento);
        e.setTelefono(telefono);
        e.setCorreo(correo);
        eventoService.create(e);
        return "redirect:listadoeventos";
    }

    @RequestMapping(value = "/borrar_evento", method = RequestMethod.POST)
    public String doBorrarEvento(@RequestParam("id_evento") String id_evento, Model model) {
        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
        eventoService.remove(e.getId_evento());
        return "redirect:listadoeventos";

    }

    @RequestMapping(value = "/ir_crear_evento", method = RequestMethod.GET)
    public String doIrEventos() {
        return "/eventos";
    }
    /*
    @RequestMapping(value = "/anadir", method = RequestMethod.POST)
    public String doAnadirTrabaja(@RequestParam("id_evento") String id_evento,
    @RequestParam("id_trabaja") String id_trabaja,
    Model model) {
    Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
    Trabaja trabaja = trabajaService.findByPK(KeyFactory.stringToKey(id_trabaja));
    //model.addAttribute("trabaja", trabaja);
    Key mikey = trabaja.getId_trabaja();
    e.getTrabajas().add(mikey);
    return "redirect:listadoeventos";
    }
     */

    @RequestMapping(value = "/anadirfincaalevento", method = RequestMethod.POST)
    public String doAnadirFincaAlEvento(@RequestParam("id_evento") String id_evento,
            @RequestParam("id_finca") String id_finca,
            Model model) {
        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
        Finca f = fincaService.findByPK(KeyFactory.stringToKey(id_finca));

        Trabaja t = e.crearTrabaja();          //Creo un Trabaja y le asigno el evento al ke pertence(y su fecha)
        t.setFinca(f.getId_finca());        //A ese Trabaja le meto una Key de Finca (Le asigno una finca)


        t = trabajaService.update(t); //persisitir el trabaja
        return "redirect:listadoeventos";
    }

    @RequestMapping(value = "/ir_asignar_finca", method = RequestMethod.GET)
    public String doIrAsignarFinca(@RequestParam("id_evento") String id_evento,
            Model model) {
        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
        model.addAttribute("evento", e);
        final Collection<Finca> espacios = fincaService.getAllFincas();
        model.addAttribute("espacios", espacios);
        return "/asignafincas";
    }

    @RequestMapping(value = "/irmodificarfincaasignadaevento", method = RequestMethod.GET)
    public String doIrModificarFincaAsignadaEvento(@RequestParam("id_evento") String id_evento,
            Model model) {
        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
        model.addAttribute("evento", e);
        final Collection<Finca> espacios = fincaService.getAllFincas();
        model.addAttribute("espacios", espacios);
        String modificar = "modificar";
        model.addAttribute("modificar", modificar);
        return "/asignafincas";
    }

    @RequestMapping(value = "/modificarfincaasignadaevento", method = RequestMethod.POST)
    public String doModificarFincaAsignadaEvento(@RequestParam("id_evento") String id_evento,
            @RequestParam("id_finca") String id_finca,
            Model model) {
        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
        Finca f = fincaService.findByPK(KeyFactory.stringToKey(id_finca));
        for (Trabaja trabaja : e.getTrabajas()) {
            trabaja.setFinca(f.getId_finca());
            trabajaService.update(trabaja);
        }
        return "redirect:listadoeventos";
    }

    @RequestMapping(value = "/ir_asignar_camarero", method = RequestMethod.GET)
    public String doAsignarPersonal(@RequestParam("id_evento") String id_evento,
            Model model) {
        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));
        model.addAttribute("evento", e);
        final Collection<Camarero> plantilla = camareroService.getAllcamareros();
        model.addAttribute("plantilla", plantilla);
        return "/asignapersonal";
    }

    @RequestMapping(value = "/anadirpersonalalevento", method = RequestMethod.GET)
    public String doAnadirPersonalAlEvento(@RequestParam("id_evento") String id_evento,
            @RequestParam("variable1") String personal,
            Model model) {

        String[] personalasignado = personal.split(",");
       /* for (int i = 0; i < personalasignado.length; i++) {
            System.out.println(personalasignado[i]);
        }*/

        Evento e = eventoService.findByPK(KeyFactory.stringToKey(id_evento));

        if (e.getTrabajas().isEmpty()) {
            for (int i = 0; i <= (personalasignado.length - 1); i++) {
                Trabaja t = e.crearTrabaja();
                t.setCamtrabaja(KeyFactory.stringToKey(personalasignado[i]));
                t = trabajaService.update(t);
            }
        } else {
            int i = 0;

            if (e.getTrabajas().size() == 1) {
                Trabaja trabaja = e.getTrabajas().get(i);
                //Trabaja trab = e.crearTrabaja();
                trabaja.setCamtrabaja(KeyFactory.stringToKey(personalasignado[i]));
                trabajaService.update(trabaja);

                for ( i = 1; i <= (personalasignado.length - 1); i++) {
                 Trabaja t = e.crearTrabaja();
                t.setCamtrabaja(KeyFactory.stringToKey(personalasignado[i]));
                t.setFinca(trabaja.getFinca());
                trabajaService.update(t);
                }
              
            }else{
                Trabaja trabaja = e.getTrabajas().get(i);

                for ( i = 0; i <= (personalasignado.length - 1); i++) {
                Trabaja t = e.crearTrabaja();
                t.setCamtrabaja(KeyFactory.stringToKey(personalasignado[i]));
                t.setFinca(trabaja.getFinca());
                t = trabajaService.update(t);
                }
            }

        }
        return "redirect:listadoeventos";
    }
}
